ViewModel এবং Model এর মধ্যে Communication Setup

Microsoft Technologies - এমভিভিএম (MVVM) MVVM এবং Messaging System |
208
208

MVVM প্যাটার্নে ViewModel এবং Model এর মধ্যে যোগাযোগ স্থাপন করার মাধ্যমে ডেটা প্রসেসিং এবং ভিউ আপডেটের কাজ সঠিকভাবে সম্পাদিত হয়। ViewModel হল View এর জন্য ডেটা প্রস্তুতকারী এবং Model হল সেই ডেটা ধারণকারী অংশ।

ViewModel এর কাজ হল Model থেকে ডেটা নিয়ে তা View-এ উপস্থাপনযোগ্য আকারে প্রদান করা, আবার View থেকে ইনপুট গ্রহণ করে তা Model-এ প্রেরণ করা। এই সম্পর্ক স্থাপনের জন্য বিভিন্ন যোগাযোগ পদ্ধতি এবং কৌশল ব্যবহার করা হয়, যা একে অপরের মধ্যে সঠিকভাবে ডেটা প্রেরণ এবং গ্রহণের সুযোগ দেয়।


ViewModel এবং Model এর মধ্যে যোগাযোগের কৌশল

  1. Direct Binding (Data Binding)

    • ViewModel এবং Model এর মধ্যে ডেটা যোগাযোগের সবচেয়ে সাধারণ এবং সহজ পদ্ধতি হল data binding। এখানে, ViewModel একটি ডেটা সোর্স হিসেবে কাজ করে এবং Model থেকে ডেটা গ্রহণ বা আপডেট করে।
    • ViewModel সাধারণত Model এর ডেটা পরিবর্তন বা প্রদর্শন করার জন্য data binding এর মাধ্যমে View কে অবহিত করে, আর View এর ইনপুট ViewModel এর মাধ্যমে Model-এ পাঠানো হয়।

    Data Binding উদাহরণ:

    // ViewModel
    public class ProductViewModel : INotifyPropertyChanged
    {
        private Product _product;
    
        public ProductViewModel()
        {
            _product = new Product();
        }
    
        public string ProductName
        {
            get { return _product.Name; }
            set
            {
                _product.Name = value;
                OnPropertyChanged();
            }
        }
    
        public decimal ProductPrice
        {
            get { return _product.Price; }
            set
            {
                _product.Price = value;
                OnPropertyChanged();
            }
        }
    }
    
    <!-- View (XAML) -->
    <TextBox Text="{Binding ProductName}" />
    <TextBox Text="{Binding ProductPrice}" />
    

    এই উদাহরণে, ViewModel-এ ডেটা পরিবর্তন হলেই এটি View-এ রিফ্লেক্ট হবে, এবং View থেকে ইনপুট পরিবর্তন হলে তা Model-এ প্রেরিত হবে।


  1. Command Pattern

    • Command pattern ব্যবহার করা হয় যখন ViewModel Model এ কোন কার্যকরী পরিবর্তন করতে চায়। Command হল একটি অবজেক্ট যা নির্দিষ্ট কোনো কাজ সম্পাদন করার জন্য তৈরি করা হয়।
    • ViewModel কমান্ড গ্রহণ করে এবং নির্দিষ্ট Model এর কার্যকরী মেথডগুলি কল করে, যা সাধারণত Model এ ডেটা পরিবর্তন বা স্টোরেজ কাজ করে।

    Command Pattern উদাহরণ:

    public class SaveCommand : ICommand
    {
        private readonly ProductViewModel _viewModel;
    
        public SaveCommand(ProductViewModel viewModel)
        {
            _viewModel = viewModel;
        }
    
        public bool CanExecute(object parameter)
        {
            return !string.IsNullOrEmpty(_viewModel.ProductName) && _viewModel.ProductPrice > 0;
        }
    
        public void Execute(object parameter)
        {
            var product = new Product
            {
                Name = _viewModel.ProductName,
                Price = _viewModel.ProductPrice
            };
            _viewModel.SaveProduct(product);
        }
    
        public event EventHandler CanExecuteChanged;
    }
    
    <Button Content="Save" Command="{Binding SaveCommand}" />
    

    এখানে, SaveCommand ViewModel এর মধ্যে তৈরি করা হয়েছে যা Model এ প্রোডাক্ট সেভ করার কাজ করে।


  1. Event Aggregator Pattern

    • Event Aggregator প্যাটার্ন ব্যবহার করে ViewModel এবং Model এর মধ্যে সন্নিবেশ ঘটানো যেতে পারে যেখানে দুটি পৃথক উপাদান পরস্পরের সাথে যোগাযোগের জন্য ইভেন্ট প্রকাশ করে। এটি বেশ কার্যকর যখন ViewModel এবং Model একে অপরের সাথে সরাসরি যোগাযোগ করতে চায় না, তবে একটি মিডলম্যানের মাধ্যমে ইভেন্ট আদান প্রদান করতে চায়।
    • সাধারণত, Event Aggregator ক্লাস থাকে, যা একাধিক ViewModel বা Model এর ইভেন্টগুলো সংগ্রহ করে এবং যে কোনো উপাদান যখন একটি ইভেন্ট ঘটায়, তখন তা অন্য উপাদানকে অবহিত করে।

    Event Aggregator Pattern উদাহরণ:

    public class EventAggregator
    {
        private readonly Dictionary<Type, List<Delegate>> _subscribers = new Dictionary<Type, List<Delegate>>();
    
        public void Subscribe<TEvent>(Action<TEvent> action)
        {
            if (!_subscribers.ContainsKey(typeof(TEvent)))
            {
                _subscribers[typeof(TEvent)] = new List<Delegate>();
            }
            _subscribers[typeof(TEvent)].Add(action);
        }
    
        public void Publish<TEvent>(TEvent eventData)
        {
            if (_subscribers.ContainsKey(typeof(TEvent)))
            {
                foreach (var action in _subscribers[typeof(TEvent)])
                {
                    ((Action<TEvent>)action).Invoke(eventData);
                }
            }
        }
    }
    
    // ViewModel A
    public class ProductViewModelA
    {
        private readonly EventAggregator _eventAggregator;
    
        public ProductViewModelA(EventAggregator eventAggregator)
        {
            _eventAggregator = eventAggregator;
            _eventAggregator.Subscribe<ProductCreatedEvent>(OnProductCreated);
        }
    
        private void OnProductCreated(ProductCreatedEvent productEvent)
        {
            // Handle event here
        }
    }
    
    // ViewModel B
    public class ProductViewModelB
    {
        private readonly EventAggregator _eventAggregator;
    
        public ProductViewModelB(EventAggregator eventAggregator)
        {
            _eventAggregator = eventAggregator;
        }
    
        public void CreateProduct(Product product)
        {
            _eventAggregator.Publish(new ProductCreatedEvent(product));
        }
    }
    

    এখানে, ProductViewModelA এবং ProductViewModelB একে অপরের সাথে যোগাযোগ করতে EventAggregator ব্যবহার করছে।


ViewModel এবং Model এর মধ্যে Communication Flow

  1. Model ডেটা বা বিজনেস লজিক সমাধান করে এবং ViewModel সেই ডেটা গ্রহণ করে।
  2. ViewModel Model-এ কোনো পরিবর্তন প্রেরণ করতে পারে (যেমন, নতুন প্রোডাক্ট তৈরি করা বা তথ্য আপডেট করা)।
  3. View থেকে ViewModel এর মাধ্যমে ইনপুট প্রেরণ হলে, ViewModel সেই ইনপুট Model-এ পাঠায়।
  4. ViewModel Model থেকে প্রাপ্ত ডেটা View-এ উপস্থাপন করার জন্য প্রস্তুত করে।

এইভাবে ViewModel এবং Model এর মধ্যে যোগাযোগ স্থাপন করা হয়, যা অ্যাপ্লিকেশনটির কার্যকারিতা ও নির্ভুলতা নিশ্চিত করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion